为程序选择正确的数据管理策略很大程度上是偏好的问题。事实上，可以从一种策略开始，然后随着项目的成熟而转向另一种策略。这里有一些指导方针，可以帮助我们选择符合需要的策略。\par

首先是使用显式数据移动还是隐式数据移动，这极大地影响了对程序进行的操作。隐式数据移动通常更容易，因为所有数据移动都是隐式处理的，从而让我们专注于计算。\par

如果从一开始就完全控制所有的数据移动，使用USM设备分配的显式数据移动就是不错的选择。我们只需要确保在主机和设备之间添加所有必要的副本即可。\par

选择隐式数据移动策略时，仍然可以选择是否使用缓冲区或USM主机或共享指针。如果正在移植一个使用指针的C/C++程序，USM是更简单的方式，无需修改大多数的代码。如果数据表示没有引导我们选择一个策略，则可以问的另一个问题，希望如何表达内核之间的依赖关系。如果更愿意考虑内核之间的数据依赖关系，那么选择缓冲区。如果倾向于把依赖关系看作是在另一个计算之前执行一个计算，并且想使用一个有序队列或显式事件或内核之间的等待来表示依赖关系，那么选择USM。\par

使用USM指针(显式或隐式数据移动)时，可以选择想要使用类型的队列。有序队列简单直观，但限制了运行时，并可能限制性能。无序队列更复杂，但给了运行时更多的自由来重新排序和重叠执行。如果程序在内核之间有复杂的依赖关系，那么无序队列类是正确的选择。如果程序只是一个接一个地运行多个内核，那么有序队列将是更好的选择。\par






















